package com.mt.api.util;

import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Objects;

/**
 * @Author: plover
 * @Date: 2022/04/12 22:03
 * @Description:
 */
public class AmountUtil {

    private static BigDecimal unitDecimal = new BigDecimal(100);
    private static DecimalFormat decimalFormat = new DecimalFormat("0.00#");

    /**
     * 分转换成元
     *
     * @param num
     * @return
     */
    public static String divideHundred(Integer num) {
        if (Objects.isNull(num)) {
            return StringUtils.EMPTY;
        }
        BigDecimal decimal = new BigDecimal(num).divide(unitDecimal);
        // 四舍五入
        BigDecimal value = decimal.setScale(2, BigDecimal.ROUND_HALF_UP);
        // 不足两位小数补0
        return decimalFormat.format(value);
    }

    public static String divideHundred(String num) {
        if (StringUtils.isEmpty(num)) {
            return StringUtils.EMPTY;
        }
        BigDecimal decimal = new BigDecimal(num).divide(unitDecimal);
        // 四舍五入
        BigDecimal value = decimal.setScale(2, BigDecimal.ROUND_HALF_UP);
        // 不足两位小数补0
        return decimalFormat.format(value);
    }

    public static String divideHundred(BigDecimal decimal) {
        if (Objects.isNull(decimal)) {
            return StringUtils.EMPTY;
        }
        BigDecimal divide = decimal.divide(unitDecimal, 2, BigDecimal.ROUND_HALF_UP);
        // 不足两位小数补0
        return decimalFormat.format(divide);
    }

    /**
     * 除法
     *
     * @param denominator  分母
     * @param molecular  分子
     * @return
     */
    public static String divide(Integer denominator, Integer molecular) {
        if (molecular == 0) {
            return StringUtils.EMPTY;
        }
        BigDecimal denominatorDecimal = new BigDecimal(denominator);
        BigDecimal molecularDecimal = new BigDecimal(molecular);
        BigDecimal divide = denominatorDecimal.divide(molecularDecimal, 2, BigDecimal.ROUND_HALF_UP);
        return decimalFormat.format(divide);
    }

    /**
     * 元转换成分
     *
     * @param num
     * @return
     */
    public static Integer multiplyHundred(BigDecimal num) {
        if (Objects.isNull(num)) {
            return 0;
        }
        return num.multiply(unitDecimal).intValue();
    }
}
